import { useState, useEffect, use } from "react"; import { StyleSheet, Text, View, ScrollView, Pressable, ActivityIndicator, } from "react-native"; import { useLocalSearchParams, router, Stack } from "expo-router"; import { format } from "date-fns"; import { ptBR } from "date-fns/locale"; import { Card, SubtleInfoCard } from "@/components/ui/Cards"; import { Badge } from "@/components/ui/Badge"; import { Button } from "@/components/ui/Button"; import { Col, Between, Row } from "@/components/ui/LayoutHelpers"; import { Section, SectionHeader } from "@/components/ui/Sections"; import { Theme, Colors, Spacing } from "@/constants/theme"; import { MaterialIcons } from "@expo/vector-icons"; import { useSleepRecord, useDeleteSleepRecord, } from "@/hooks/useSleepRecord.queries"; import { formatDate } from "@/lib/utils/time"; export default function SleepDetailScreen() { const { id } = useLocalSearchParams<{ id: string }>(); const { data: sleepRecord, isLoading, isError } = useSleepRecord(id); const deleteSleepRecord = useDeleteSleepRecord(); const [minutesLeft, setMinutesLeft] = useState(0); const [canDelete, setCanDelete] = useState(false); useEffect(() => { const updateTimer = () => { const createdAt = sleepRecord?.createdAt; if (!createdAt) return; const msSinceCreation = Date.now() - createdAt.getTime(); const deletionWindowMs = 5 * 60 * 1000; const newCanDelete = msSinceCreation < deletionWindowMs; const newMinutesLeft = Math.max( 0, Math.ceil((deletionWindowMs - msSinceCreation) / 60000), ); setCanDelete(newCanDelete); setMinutesLeft(newMinutesLeft); }; if (isLoading) return; updateTimer(); // Set initial values const interval = setInterval(updateTimer, 1000); return () => clearInterval(interval); }, [sleepRecord, isLoading]); console.log("sleepRecord", sleepRecord) console.log("isLoading", isLoading) if (isLoading) { return ( ); } if (isError || !sleepRecord) { return ( Registro não encontrado. router.back()} style={styles.backButton}> Voltar ); } const handleDelete = async () => { await deleteSleepRecord.mutateAsync(String(sleepRecord.id)); router.back(); }; const deleteButtonMsg = () => { const msg = "Excluir Registro"; const timeLeftStr = `(Disponível por ${minutesLeft < 1 ? "<1" : minutesLeft}:00)`; const suffix = canDelete ? timeLeftStr : "(Expirado)"; return `${msg} ${suffix}`; }; return ( <> {/* Header card */} {sleepRecord.average}h de sono {formatDate(new Date(sleepRecord.date))} {/* Annotation / notes */} {sleepRecord.annotations && (
"{sleepRecord.annotations?.trim()}"
)} {/* Delete */} GESTÃO DO REGISTRO